#define _USE_MATH_DEFINES
#include <cstdlib>
#include <cstring>
#include <string>
#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
using namespace std;

typedef struct TPoint {
	double x, y;
} TPoint;

typedef struct TTri {
	TPoint points[4];
} TTri;

vector<TTri> triList;
vector<int> count;

TPoint operator-(TPoint a, TPoint b) {
	TPoint res;
	res.x = a.x - b.x;
	res.y = a.y - b.y;
	return res;
}

bool isEnd(TTri x) {
	for (int i=0; i<3; ++i) {
		if (fabs(x.points[i].x) > 0.00001) 
			return false;
		if (fabs(x.points[i].y) > 0.00001) 
			return false;
	}
	return true;
}

double cross(TPoint a, TPoint b) {
	return a.x*b.y - a.y*b.x;
}

double dot(TPoint a, TPoint b) {
	return a.x*b.x + a.y*b.y;
}

double norm(TPoint p) {return p.x*p.x + p.y*p.y;}

double calAngel(TPoint d, TPoint a, TPoint b) {
	TPoint u, v;
	u = a-d;
	v = b-d;
	double deg = asin(cross(u, v) / sqrt(norm(u)*norm(v)));
	if (norm(b-a) > norm(u) + norm(v)) {
		if (deg < 0)
			deg = -M_PI - deg;
		else
			deg = M_PI - deg;
	}
	return deg;
}

bool isOnLine(TPoint d, TPoint a, TPoint b) {
	return fabs(cross(a-d, b-d)) < 0.00001;
}
bool isInLine(TPoint d, TPoint a, TPoint b) {
	return dot(a-d, b-d) < 0.00001;
}

bool inTri(TPoint d, TTri tri) {
	for (int i=0; i<3; ++i)
		if (isOnLine(d, tri.points[i], tri.points[i+1])) {
			if (isInLine(d, tri.points[i], tri.points[i+1]))
				return true;
		}

	double ang[3];
	double tot = 0;
	for (int i=0; i<3; ++i) {
		ang[i] = calAngel(d, tri.points[i], tri.points[i+1]);
		tot += ang[i];
	}

	return (fabs(tot) >= 1);//-PI, 0(out), PI
}

void judgeDot(TPoint d) {
	for (int i=0; i<triList.size(); ++i)
		if (inTri(d, triList[i])) {
// 			cout << d.x << " " << d.y << endl;
			++count[i];
		}
}

int main(void)
{
	freopen("input.txt", "r", stdin);
// 	freopen("output2.txt", "w", stdout);
	while (true) {
		TTri tri;
		for (int i=0; i<3; ++i)
			cin >> tri.points[i].x >> tri.points[i].y;
		tri.points[3] = tri.points[0];
		if (isEnd(tri)) break;
		triList.push_back(tri);
		count.push_back(0);
	}
	for (int i=1; i<100; ++i) {
		int minV = 1000, maxV = -1000, tmpC = 0;
		for (int j=1; j<100; ++j) {
//			cout << i << " " << j << endl;
			TPoint d;
			d.x = i;
			d.y = j;
			tmpC = count[0];
			judgeDot(d);
			if (count[0] > tmpC) {
				minV = min(minV, j);
				maxV = max(maxV, j);
			}
		}
		if (minV < 100)
			cout << minV << " " << maxV << endl;
	}
	for (int i=0; i<count.size(); ++i)
		cout <<setw(4) << right << count[i] << endl;
//	if (count.size()>0) cout <<setw(4) << right << count[count.size()-1];
// 	fclose(stdout);
	return 0;
}
